package com.linzm.leetcode.primary.exercises2_20230116;

/**
 * @Author zimingl
 * @Date 2023/1/19 21:50
 * @Description: 十进制整数的反码
 */
public class Demo9_1009 {
    public static void main(String[] args) {
        /**
         * 每个非负整数 N 都有其二进制表示。例如， 5 可以被表示为二进制 "101"，11 可以用二进制 "1011" 表示，依此类推。注意，除 N = 0 外，任何二进制表示中都不含前导零。
         * 二进制的反码表示是将每个 1 改为 0 且每个 0 变为 1。例如，二进制数 "101" 的二进制反码为 "010"。
         * 给你一个十进制数 N，请你返回其二进制表示的反码所对应的十进制整数。
         */
        Demo9_1009 demo9_1009 = new Demo9_1009();
        int n = 7;
        int num = demo9_1009.bitwiseComplement(n);
        System.out.println(num);
    }

    private int bitwiseComplement(int n) {
        String binaryString = Integer.toBinaryString(n);
        String reverseString = "";
        for (int i = 0; i < binaryString.length(); i++) {
            if (binaryString.charAt(i) == '0') {
                reverseString += "1";
            } else {
                reverseString += "0";
            }
        }
        return Integer.parseInt(reverseString, 2);
    }
}
